#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 5e5 + 10;
int f[maxn][21]; // 以 i 开始 长度为 2^j 的区间的最值
int arr[maxn];

int n, q;

int getM(int l, int r){
	int k=log(r-l+1)/log(2);
	return max(f[l][k], f[r-(1<<k)+1][k]);
}


void solve(){
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		cin>>arr[i];
		f[i][0]=arr[i];
	}
	
	// 处理出来 f 数组
	for(int j=1;j<=20;j++){ // 注意一定是先枚举 j 的
		for(int i=1;i+(1<<j)-1<=n;i++){
			f[i][j]=max(f[i][j-1], f[i+(1<<(j-1))][j-1]);
		}
	}
	
	for (int i=1;i<=q;i++) {
		int l, r;
		cin>>l>>r;
		cout << getM(l, r)<<'\n';
	}
	
}

signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
